<?php
/**
 * Created by PhpStorm.
 * User: Keter
 * Date: 2016/8/27
 * Time: 9:12
 */
class UserID extends DatabaseBase
{
    public function generateUid()
    {
        $redis = $this->redis('user_info');

        for($i=0; $i<10; $i++){
            $uid = 0;
            //生成符合规则的UID
            for ($n = 0; $n < 30; $n++) {
                //7位开始，将近1亿，用户量再大时再调整
                $randID = rand(100000, 100000000);
                if ($this->checkUID($randID)) {
                    $uid = $randID;
                    break;
                }
            }
            //检测UID是否存在
            if ($uid > 0){
                if(!$redis->exists("U:$uid")) {
                    return $uid;
                }
            }
        }

        return false;
    }

    public function checkUID($uid)
    {
        /**
         * 长度验证
         */
        if ($uid < 100000) {
            return false;
        }

        /**
         * 含有3位以上重复数字
         */
        if (preg_match('/([1-9])\1{2}/', $uid)) {
            return false;
        }

        /**
         * 从头到尾顺子（最多9位，已够）
         */
        $arr = [
            //7位顺子
            '1234567', '2345678', '3456789',
            //8位顺子
            '12345678', '23456789',
            //9位顺子
            '123456789'
        ];
        if (in_array($uid, $arr)) {
            return false;
        }

        /**
         * 从头到尾连续号码
         */
        /**
         * AAAAA...
         */
        if (preg_match('/^([1-9])\1+$/', $uid)) {
            return false;
        }

        /**
         * 从头到尾ABAB(A)
         */
        if (preg_match('/^(([1-9])([0-9]))\1+\2?$/', $uid, $mt)) {
            return false;
        }

        /**
         * 从头到尾AABB(AA)
         */
        if (preg_match('/^(([1-9])\2([0-9])\3)\1*(\2{1,2})?$/', $uid, $mt)) {
            return false;
        }

        return true;
    }
}
